package amtf

import (
	"fmt"
	"regexp"
	"strings"
	"unicode"
)

// 实现与 strcase.ToCamel 类似的大驼峰转换，同时保留中文部分
func AToCamel(s string) string {
	if s == "" {
		return ""
	}

	// 用于匹配中文的正则表达式
	reChinese := regexp.MustCompile(`[\p{Han}]+`)

	// 用于分割字符串的正则表达式（以下划线和非字母字符为分隔符）
	reSplit := regexp.MustCompile(`(_+)|([^\p{Han}a-zA-Z0-9]+)`)

	// 分割字符串
	parts := reSplit.Split(s, -1)
	var result strings.Builder
	for _, part := range parts {
		if part == "" {
			continue
		}

		// 如果是中文部分，直接添加
		if reChinese.MatchString(part) {
			result.WriteString(part)
			continue
		}

		// 非中文部分转换为首字母大写，其余小写
		var hasAlpha bool
		var buf []rune
		for i, r := range part {
			if unicode.IsLetter(r) {
				hasAlpha = true
				if i == 0 { // 每个单词的首字母大写
					buf = append(buf, unicode.ToUpper(r))
				} else { // 其余字母小写
					buf = append(buf, unicode.ToLower(r))
				}
			} else {
				buf = append(buf, r) // 非字母字符直接保留
			}
		}

		if hasAlpha {
			result.WriteString(string(buf))
		}
	}

	return result.String()
}

// 用法👉 A含其中之一(身份, "创建者|更新者")
func A含其中之一(检测目标 string, 正则或 string, 精确匹配 bool) (res bool) {
	//形如 pattern := `^(创建者|更新者)$`
	pattern := fmt.Sprintf("(%s)", 正则或)
	if 精确匹配 {
		pattern = fmt.Sprintf("^(%s)$", 正则或)
	}
	reg, err := regexp.Compile(pattern)
	if err != nil {
		fmt.Println("正则表达式编译出错:", err)
		return
	}
	if reg.MatchString(检测目标) {
		return true
	} else {
		return false
	}
}
